#!/bin/bash

# ANSI颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
MAGENTA='\033[0;35m'
CYAN='\033[0;36m'
BOLD='\033[1m'
RESET='\033[0m'

# 进度条长度
BAR_LENGTH=40

# 回旋镖风格的进度条
spin() {
    local -r chars="/-\|"
    local -r delay=0.1  # 每个字符显示的时间间隔
    local i=0

    while :; do
        printf "%s\b" "${chars:$i:1}"
        (( i = (i + 1) % ${#chars} ))
        sleep $delay
    done
}

# 更新进度条
update_progress() {
    local progress=$1
    local color=$2

    local num_chars=$(( progress * BAR_LENGTH / 100 ))
    local num_spaces=$(( BAR_LENGTH - num_chars ))

    # 打印进度条
    printf "[${color}%-${BAR_LENGTH}s${RESET}] %d%%\r" "$(printf '#%.0s' $(seq 1 $num_chars))" "$progress"
}

# 处理任务，模拟需要显示进度的任务
process_task() {
    local total_steps=50

    for (( i = 1; i <= total_steps; i++ )); do
        # 模拟任务的处理时间
        sleep 0.1

        # 计算进度百分比
        local progress=$(( i * 100 / total_steps ))

        # 更新进度条
        update_progress $progress $CYAN
    done

    echo  # 添加换行
}

# 主程序
main() {
    echo "开始处理任务..."

    # 启动进度条
    spin &

    # 保存进度条的PID
    SPIN_PID=$!

    # 执行任务
    process_task

    # 停止进度条
    if kill -0 $SPIN_PID > /dev/null 2>&1; then
        kill $SPIN_PID
    fi

    echo -e "\n任务处理完成！"
}

# 运行主程序
main